home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / tool / fapxtool / src / txm / txmhp.c < prev    next >
C/C++ Source or Header  |  1995-01-06  |  4KB  |  183 lines

  1. /***************
  2. *
  3. * txm\txmhp.c
  4. */
  5. #include "txm.h"
  6.  
  7. #if 0
  8. /* マージファイル更新チェック/必要ならマージファイルを新しくする/情報ファイル更新(HP用) */
  9. int hchknewmerge(char *buf, FILE **fp)
  10. {
  11.     long article;                /* 発言番号 */
  12.     union _LONG ltime;
  13.     int year = 0, month = 0, day = 0, hour = 0, minute = 0;
  14.     unsigned short ym = 0, dhm = 0;
  15.     int newflag = FALSE;
  16.     char ext[6];
  17.  
  18.     article = atol(buf);
  19.     sscanf(buf+5, "[%2d/%2d/%2d %2d:%2d]",
  20.             &year, &month, &day, &hour, &minute);
  21.     ym = (year << 4) | month;
  22.     dhm = (day << 11) | (hour << 6) | minute;
  23.     ltime.s.h = ym;
  24.     ltime.s.l = dhm;
  25.  
  26.     switch (nextmerge) {
  27.     case 0:
  28.         if (filelength(fileno(*fp)) >= nextvalue) {
  29.             newflag = TRUE;
  30.         }
  31.         break;
  32.     case 1:
  33.         if (nextvalue == 1) {
  34.             if (nowinfo->art > article) {
  35.                 newflag = TRUE;
  36.             }
  37.         }
  38.         else if ((article % nextvalue) == 1) {
  39.             newflag = TRUE;
  40.         }
  41.         break;
  42.     case 2:
  43.         if (nowinfo->ltime.s.h != 0) {
  44.             if (nowinfo->ltime.s.h < ym) {
  45.                 newflag = TRUE;
  46.             }
  47.         }
  48.         break;
  49.     }
  50.  
  51.     if (nowinfo->ltime.x > ltime.x) {
  52.         newflag = FALSE;
  53.     }
  54.     else {
  55.         nowinfo->ltime.x = ltime.x;
  56.     }
  57.  
  58.     if (nowinfo->art == 0) {
  59.         newflag = FALSE;
  60.     }
  61.  
  62.     nowinfo->art = (unsigned short)article;
  63.  
  64.     if (newflag) {
  65.         fclose(*fp);
  66.         nowinfo->ext += 1;
  67.         sprintf(ext, ".%03d", nowinfo->ext);
  68.         makenewextname(logfile, mfile, ext);
  69.         if ((*fp = fopen(mfile, "wb")) == NULL) {
  70.             return ERROR;
  71.         }
  72.         fputs(head1, *fp);
  73.         fputs(head2, *fp);
  74.         fputs(mesname, *fp);
  75.     }
  76.     else {
  77.         return FALSE;
  78.     }
  79.     return TRUE;
  80. }
  81. #endif
  82.  
  83. /* HPマージ */
  84. int  hpmerge()
  85. {
  86.     FILE *fr, *fw, *fm;
  87.     int ret;
  88.     long nowsize, limitsize;
  89.     char *vbuf;
  90.  
  91. /*    printf("hpmerge()\n");    */
  92.     if ((fr = fopen(logfile, "rb")) == NULL) {
  93.         return FALSE;
  94.     }
  95.     /* setvbufのmallocは取りっ放し(終了時の自動開放??) */
  96.     setvbuf(fr, malloc(VBUFSIZE), _IOFBF, VBUFSIZE);
  97.  
  98.     if ((fm = fopen(mfile, "ab")) == NULL) {
  99.         fclose(fr);
  100.         return FALSE;
  101.     }
  102.     /* setvbufのmallocは取りっ放し(終了時の自動開放??) */
  103.     setvbuf(fm, vbuf = malloc(VBUFSIZE), _IOFBF, VBUFSIZE);
  104.  
  105.     fgets(head1, 80, fr);    /* ヘッダ読み込み */
  106.     fgets(head2, 80, fr);    /* ヘッダ読み込み */
  107.  
  108.     limitsize = (long)minrun * 1024;
  109.     nowsize = filelength(fileno(fr));
  110.     nowsize -= strlen(head1);
  111.     nowsize -= strlen(head2);
  112.  
  113.     if (fgets(line1, 100, fr) == NULL) {
  114.         nowsize = 0;
  115.     }
  116.     nowsize -= strlen(line1);
  117.     while (!matchstr(log_hp, line1)) {
  118.         strcpy(mesname, line1);
  119.         if (fgets(line1, 100, fr) == NULL) {
  120.             nowsize = 0;
  121.             break;
  122.         }
  123.         nowsize -= strlen(line1);
  124.     }
  125.  
  126.     if (filelength(fileno(fm)) == 0) {
  127.         fputs(head1, fm);
  128.         fputs(head2, fm);
  129.         fputs(mesname, fm);
  130.     }
  131.  
  132.     while (nowsize > limitsize) {
  133.         if (ret = fchknewmerge(line1, line1+6, &fm)) {
  134.             if (ret == ERROR) {
  135.                 fclose(fr);
  136.                 return FALSE;
  137.             }
  138.         }
  139.         fputs(line1, fm);
  140.         for(;;) {    /* デリミタまたは次の発言まで発言転送 */
  141.             if (fgets(line1, 82, fr) == NULL) {
  142.                 break;
  143.             }
  144.             nowsize -= strlen(line1);
  145.             if (*((long *)line1) == 0x0a0d0820) { /* デリミタ(リトルエンディアン用) */
  146.                 if (fgets(line1, 82, fr) == NULL) {
  147.                     break;
  148.                 }
  149.                 nowsize -= strlen(line1);
  150.                 strcpy(mesname, line1);
  151.                 if (fgets(line1, 82, fr) == NULL) {
  152.                     break;
  153.                 }
  154.                 nowsize -= strlen(line1);
  155.             }
  156.             if (matchstr(log_hp, line1)) {
  157.                 break;
  158.             }
  159.             fputs(line1, fm);
  160.         }
  161.     }
  162.  
  163.     fclose(fm);
  164.     if ((fw = fopen(workfile, "wb")) == NULL) {
  165.         fclose(fr);
  166.         return FALSE;
  167.     }
  168.     setvbuf(fw, vbuf, _IOFBF, VBUFSIZE);
  169.  
  170.     fputs(head1, fw);
  171.     fputs(head2, fw);
  172.     fputs(mesname, fw);
  173.     fputs(line1, fw);
  174.     while (fgets(line1, 82, fr)) {
  175.         fputs(line1, fw);
  176.     }
  177.     fclose(fr);
  178.     fclose(fw);
  179.  
  180.     return TRUE;
  181. }
  182.  
  183.